package com.jsy.seckill.service;

import com.github.pagehelper.PageInfo;
import com.jsy.seckill.pojo.SeckillOrder;

import java.util.List;

/****
 * @Author:jsy
 * @Description:SeckillOrder业务层接口
 * @Date goalong
 *****/
public interface SeckillOrderService {

    /***
     * SeckillOrder多条件分页查询
     * @param seckillOrder
     * @param page
     * @param size
     * @return
     */
    PageInfo<SeckillOrder> findPage(SeckillOrder seckillOrder, int page, int size);

    /***
     * SeckillOrder分页查询
     * @param page
     * @param size
     * @return
     */
    PageInfo<SeckillOrder> findPage(int page, int size);

    /***
     * SeckillOrder多条件搜索方法
     * @param seckillOrder
     * @return
     */
    List<SeckillOrder> findList(SeckillOrder seckillOrder);

    /***
     * 删除SeckillOrder
     * @param id
     */
    Integer delete(Long id);

    /***
     * 修改SeckillOrder数据
     * @param seckillOrder
     */
    Integer update(SeckillOrder seckillOrder);

    /***
     * 新增SeckillOrder
     * @param seckillOrder
     */
    Integer add(SeckillOrder seckillOrder);

    /**
     * 根据ID查询SeckillOrder
     * @param id
     * @return
     */
     SeckillOrder findById(Long id);

    /***
     * 查询所有SeckillOrder
     * @return
     */
    List<SeckillOrder> findAll();

    /***
     *秒杀下单
     * @return 查询结果
     */
    Long orderCreate(String username, String time, Long id) throws InterruptedException;

    /**
     *   支付成功 (先查询有没有该订单)更新redis支付状态 同步到mysql中 删除redis订单数据 删除排队标识
     * @param outTradeNo 秒杀订单id
     * @param transactionId 交易号
     * @param username 用户名
     */
    void saveOrderInRedisToDB(String outTradeNo, String transactionId, String username);

    /**
     *根据订单号查在redis中的订单
     * @param outTradeNo 订单号
     * @return 秒杀订单
     */
    SeckillOrder findSeckillOrderInRedis(String outTradeNo);

    /**
     * 支付失败   先查询有没有该订单)回滚redis库存 删除redis订单 需要查看秒杀商品的time 商品id 用户名用来删除重复排队标识
     * @param out_trade_no 秒杀订单id
     * @param time 秒杀时间段
     * @param username 用户名
     */
    void deleteOrder(String out_trade_no, String time, String username);

    /**
     * 删除redis中的订单
     * @param outTradeNo 订单号
     * @param username 用户名
     */
    void deleteSeckillOrderInRedis(String outTradeNo, String username);
}
